/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2406                                  |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// AMGCL 求解器配置 - 已优化（二分搜索 + std::set）
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
    // 速度场求解器（非对称矩阵）
    U
    {
        solver          amgcl;
        tolerance       1e-08;
        relTol          1e-03;
        
        amgcl
        {
            options
            {
                solver      bicgstab;    // BiCGStab（非对称矩阵专用）
                relaxation  spai0;       // SPAI0 预条件器（并行友好）
                maxiter     100;
            }
            
            caching
            {
                matrix
                {
                    update  always;      // 每步更新矩阵（速度场推荐）
                }
            }
        }
    }

    // 压力校正（对称矩阵）
    pCorr
    {
        solver          amgcl;
        tolerance       1e-08;
        relTol          0.01;
        
        amgcl
        {
            options
            {
                solver      cg;           // CG（对称矩阵专用）
                relaxation  spai0;        // SPAI0 预条件器
                maxiter     100;
            }
            
            caching
            {
                matrix
                {
                    update  periodic;
                    periodicCoeffs { frequency  1; }
                }
            }
        }
    }

    // 压力校正最终迭代
    pCorrFinal
    {
        solver          amgcl;
        tolerance       1e-15;
        relTol          0;
        
        amgcl
        {
            options
            {
                solver      cg;          // CG（对称矩阵专用）
                relaxation  spai0;
                maxiter     100;
            }
            
            caching
            {
                matrix
                {
                    update  periodic;
                    periodicCoeffs { frequency  1; }
                }
            }
        }
    }

    // 压力场求解器（对称矩阵）
    p
    {
        solver          amgcl;
        tolerance       1e-08;
        relTol          0.01;
        
        amgcl
        {
            options
            {
                solver      cg;           // CG（对称矩阵专用）
                relaxation  spai0;        // SPAI0 预条件器
                maxiter     100;
            }
            
            caching
            {
                matrix
                {
                    update  periodic;
                    periodicCoeffs { frequency  1; }
                }
            }
        }
    }

    // 压力最终迭代
    pFinal
    {
        solver          amgcl;
        tolerance       1e-15;
        relTol          0;
        
        amgcl
        {
            options
            {
                solver      cg;          // CG（对称矩阵专用）
                relaxation  spai0;       // SPAI0 预条件器
                maxiter     100;
            }
            
            caching
            {
                matrix
                {
                    update  periodic;    // 周期更新
                    periodicCoeffs { frequency  1; }
                }
            }
        }
    }

}

SIMPLE
{
    nNonOrthogonalCorrectors 4;
    residualControl
    {
        p    1e-10;
    }
    pRefCell        0;
    pRefValue       0;
}

PISO
{
    momentumPredictor        yes;
    nCorrectors     1;
    nNonOrthogonalCorrectors 0;
    pRefCell        0;
    pRefValue       0;
}

relaxationFactors
{
    fields
    {
        p               1.0;
    }
    equations
    {
        U               1.0;
    }
}

// ************************************************************************* //
